package com.nian.hbase.base.service;

import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.filter.FilterList;

import java.util.List;

/**
 * @author zhangmj
 * @date 2020/4/19 14:31
 */
public interface IHBaseService<T> {

    /**
     * 写入数据
     * @param model
     * @return
     */
    T put(T model);

    /**
     * 写入一行、一列的值
     * @param tableName
     * @param rowName
     * @param familyName
     * @param qualifier
     * @param value
     */
    void put(String tableName, String rowName, String familyName, String qualifier, String value);

    /**
     * 获取某一行、某一列的值
     * @param tableName
     * @param rowName
     * @param family
     * @param qualifier
     * @return
     */
    String get(String tableName, String rowName, String family, String qualifier);

    /**
     * 扫描表
     * @param tableName
     * @return
     */
    ResultScanner scanner(String tableName);


    List<T> scanner(Class<T> clazz);

    /**
     * 利用过滤器获取数据
     * @param tableName
     * @param rowName
     * @param filterList
     * @return
     */
    Result getRow(String tableName, String rowName, FilterList filterList);

    /**
     * 删除行数据
     * @param tableName
     * @param rowName
     * @return
     */
    boolean deleteRow(String tableName, String rowName);

    /**
     * 删除列族
     * @param tableName
     * @param familyName
     * @return
     */
    boolean deleteColumnFamily(String tableName, String familyName);

    /**
     * 删除列
     * @param tableName
     * @param rowName
     * @param familyName
     * @param qualifier
     * @return
     */
    boolean deleteQualifier(String tableName, String rowName, String familyName, String qualifier);

    /**
     * 创建表名，若有表空间
     * @param nameSpace
     * @param tableName
     * @param columns
     * @return
     */
    boolean createTable(String nameSpace, String tableName, String... columns);

    /**
     * 新建表
     * @param tableName
     * @param columns
     * @return
     */
    boolean createTable(String tableName, String... columns);

    /**
     * 创建表空间
     * @param nameSpace
     * @return
     */
    boolean createNameSpace(String nameSpace);
    /**
     * 关闭会话
     * @param admin
     */
    void close(Admin admin);

    /**
     * 关闭表
     * @param table
     */
    void close(Table table);

    /**
     * 关闭表、会话
     * @param admin
     * @param table
     */
    void close(Admin admin, Table table);

    void close(ResultScanner scanner);
}
